# 自定义异常
# 程序可以通过创建新的异常类命名自己的异常。不论是以直接还是间接的方式，异常都应从Exception 类派生。
# 异常类通常应当保持简单，它往往只提供一些属性，允许相应的异常处理程序提取有关错误的信息。
# 3、大多数异常命名都以"Error"结尾,类似标准异常的命名,但是需要注意不要使用内置异常名

# 应用实例(custom exception.py)当我们接收Person年龄时，要求范围在 18-120 之间，否则抛出一个自定义异常，
# 并给出提示信息(循环提示,直到输入了正确的年龄)

# 自定义异常
# 定义一个自定义异常类AgeError，用于处理年龄输入错误的情况
class AgeError(Exception):
    pass

# 循环提示用户输入年龄，直到获得合法输入
while True:
    try:
        # 尝试将用户输入转换为整数
        age = int(input("请输入年龄18-120之间:"))
        # 检查年龄是否在合法范围内
        if not 18 <= age <= 120:
            # 如果年龄不在合法范围内，抛出自定义异常AgeError
            raise AgeError("年龄范围在18-120之间")
        # 如果输入合法，结束循环
        break
    except ValueError as e:
        # 如果输入不能转换为整数，提示用户并要求重新输入
        print("输入错误，请重新输入")
    except AgeError as e:
        # 如果抛出AgeError异常，提示用户年龄范围错误并要求重新输入
        print(e)

print("合法年龄:", age)